//配置路由处
//引入插件
import Vue from 'vue';
import VueRouter from 'vue-router';
import routes from './routes'

//使用插件
Vue.use(VueRouter);
import store from '@/store';
//先把VueRouter原型对象的push，先保存一份
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
// 重写push | replace
// 第一个参数：告诉原来push方法，你往哪里跳转（传递哪些参数）
// 第二个参数：成功的回调
// 第三个参数：失败的回调
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    // call || apply 区别
    // 相同点，都可以调用函数一次，都可以篡改函数的上下文一次
    // 不同点：call 与 apply 传递参数：call传递参数用逗号隔开，apply方法执行，传递数组
    originPush.call(this, location, resolve, reject);
  } else {
    originPush.call(this, location, () => { }, () => { })
  }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    originReplace.call(this, location, resolve, reject);
  } else {
    originReplace.call(this, location, () => { }, () => { })
  }
}
//配置
let router = new VueRouter({
  // kv一致省略v
  routes,
  // 滚动行为
  scrollBehavior (to, from, savedPosition) {
    // y = 0 为滚动条在最顶部
    return { y: 0 }
  }

})

// 全局守卫，前置守卫 (路由跳转之间进行判断)
router.beforeEach(async (to, from, next) => {
  // to  可以获取到你要跳转到那个路由信息
  // from 从哪个路由来的
  // next() 放行函数   next('/xxx')  放行到指定位置  next(false) 若A->B地址改变重置原位
  //next()
  let token = store.state.user.token
  // 用户信息
  let userInfo = store.state.user.userInfo.name
  if (token) {
    console.log('11')
    // 用户已经登录了
    if (to.path == "/login" || to.path == '/register') {
      next('/')
      console.log('99')
    } else {
      // 能获取到用户信息
      if (userInfo) { next() } else {
        try {
          console.log('88')
          // 没有用户信息重新发送一次
          // 获取用户信息展示  getUserInfo
          await store.dispatch("getUserInfo")
          // 放行
          next();
        } catch (error) {
          // token 失效了
          // 清除用户所有信息，强制用户重新登陆
          store.dispatch('userLogout')
          next('/login')
        }
      }
    }
  } else {
    // 未登录不能去交易相关页面、 支付相关页面、 个人中心页面
    let toPath = to.path;
    if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1) {
      // 点击必须登录的页面后，登录后即可自动重定位原来的位置
      next('/login?redirect=' + toPath)
    } else {
      next()
    }

  }
});

export default router; 